package util;

import java.util.Map;
import java.util.Objects;

public class XmlUtil {
      
	public static String GetItem(String xml,String word,Map<String, String> map)
  {
      String lab,val;
     
      while(true)
      {
          if (!xml.contains("<"))
          {
              //map.put("", "");
              return "";
          }
          lab=xml.substring(xml.indexOf("<")+1);
          while (lab.charAt(0) == '\\') lab=lab.substring(lab.indexOf("<")+1);
          lab=lab.substring(0,lab.indexOf(">"));
          xml=xml.substring(xml.indexOf("<"+lab+">")+lab.length()+2);
          if (lab.indexOf(" ")>0) lab=lab.substring(0,lab.indexOf(" "));
          if (Objects.equals(word, "") ||lab.compareToIgnoreCase(word)==0) //break;
          {
            if (lab.indexOf('/')==lab.length() -1)
              val="";
            else
              val=xml.substring(0,xml.indexOf("</"+lab+">"));
            
            if (!word.isEmpty() && val.contains("<"))
              GetItem(val,"",map);
            else
              map.put(lab,val);
            xml=xml.substring(xml.indexOf("</"+lab+">")+lab.length()+3); 
            if (!word.isEmpty()) break;
          }
      }   
      return xml;
    }
  
  public static String GetItem(String xml,String word,ItemMap item)
  {
      String lab,val;
      
      while(true)
      {
          if (!xml.contains("<"))
          {
            item.lab="";
            item.val="";
            return "";
          }
          lab=xml.substring(xml.indexOf("<")+1);
          while (lab.charAt(0) == '\\') lab=lab.substring(lab.indexOf("<")+1);
          lab=lab.substring(0,lab.indexOf(">"));
          xml=xml.substring(xml.indexOf("<"+lab+">")+lab.length()+2);
          if (lab.indexOf(" ")>0) lab=lab.substring(0,lab.indexOf(" "));
          if (Objects.equals(word, "") ||lab.compareToIgnoreCase(word)==0) //break;
          {
            if (lab.indexOf('/')==lab.length() -1)
              val="";
            else
              val=xml.substring(0,xml.indexOf("</"+lab+">"));
            
            item.lab=lab;
            item.val=val;
            xml=xml.substring(xml.indexOf("</"+item.lab+">")+item.lab.length()+3); 
            break;
          }
      }   
      return xml;
    }
  
  public String GetItem(String xml,String word)
  {
    ItemMap item= new ItemMap();
    GetItem(xml,word,item);
    
    return item.val;
  }
  
  public static String SetItem(String xml,String word,String value)
  {
    StringBuilder rxml= new StringBuilder();

    while(true)
    {
      if (!xml.contains("<"))
      {
        rxml.append("<").append(word).append(">").append(value).append("</").append(word).append(">");
        return rxml.toString();
      }

      String lab=xml.substring(xml.indexOf("<")+1);
      while (lab.charAt(0) == '\\') lab=lab.substring(lab.indexOf("<")+1);
      lab=lab.substring(0,lab.indexOf(">"));

      rxml.append(xml, 0, xml.indexOf("<" + lab + ">") + lab.length() + 2);
      xml=xml.substring(xml.indexOf("<"+lab+">")+lab.length()+2);

      if (lab.indexOf(" ")>0) lab=lab.substring(0,lab.indexOf(" "));
      if (lab.compareToIgnoreCase(word)==0) 
      {
        rxml.append(value).append(xml.substring(xml.indexOf("</" + lab + ">")));
        return rxml.toString();
      }
    }
    //return rxml;
  }

   /*
    Java里面static一般用来修饰成员变量或函数。
    但有一种特殊用法是用static修饰内部类，普通类是不允许声明为静态的，只有内部类才可以。
    被static修饰的内部类可以直接作为一个普通类来使用，而不需实例一个外部类。
   */
    public static class ItemMap {
        public String lab;
        public String val;
    }

}
